package com.bjpowerrnode.javase.array;

import java.sql.SQLOutput;

/*
数组中存储的数据类型为：引用数据类型
 */
public class ArrayTest07 {
    public static void main(String[] args) {
        //创建一个Animal类型的数组
        Animal a1 = new Animal();
        Animal a2 = new Animal();
        Animal[] animals = {a1,a2};

        for (int i = 0; i < animals.length; i++){
            Animal a = animals[i];
            a.move();

            //代码合并
            animals[i].move();
        }

        //动态初始化一个长度为2的Animal类型数组
        Animal[] ans = new Animal[2];
        ans[0] = new Animal();

        //Animal数组中可以存放Cat，因为Cat继承了Animal。
        //cat是Animal的子类，为多态，父类型引用指向子类。
        ans[1] = new Cat();

        //创建一个Animal类型的数组，数组当中存储Cat和Bird
        Animal[] anis = {new Cat(),new Bird()};
        for (int i = 0; i < anis.length; i++) {
           //这个取出来的可能是Cat，也可能是Bird，不过肯定是一个Animal
            //如果调用的方法是父类中存在的方法不需要向下转型，直接使用父类型引用即可
           // anis[i].move();
            if (anis[i] instanceof Cat){
                Cat cat =(Cat)anis[i];
                cat.catchMouse();
            }else if(anis[i] instanceof Bird){
                Bird bird = (Bird)anis[i];
                bird.sing();
            }
        }
    }
}

class Animal{
    public void move(){
        System.out.println("Animal move....");
    }
}

class Cat extends Animal{
    public void move(){
        System.out.println("猫在走猫步！");
    }

    public void catchMouse(){
        System.out.println("猫在抓老鼠");
    }
}

class Bird extends Animal{
    public void move(){
        System.out.println("Bird flying！");
    }

    public void sing(){
        System.out.println("鸟儿在歌唱");
    }
}